#ifndef __APP_DRIVER_H__
#define __APP_DRIVER_H__

#include <pthread.h>
#include <fcntl.h>
#include <unistd.h>
#include "app_buffer.h"
#include "app_pool.h"
#include "app_mqtt.h"

#define DRIVER_MAX_NUM 1
#define BLE_DEVICE_INDEX 0

/**
 * 设备索引为链接类型减一
 */

typedef struct
{
    char *file_name;                    // 文件名
    int fd;                             // 文件唯一标识符
    Double_buffer_t *up_buffer;         // 上行缓冲区
    Double_buffer_t *down_buffer;       // 下行缓冲区
    pthread_t read_thread;              // 读取数据线程
    int is_running;                     // 设备是否运转标识符
    long last_writeTime;                // 上一次写入文件时间戳
    int (*post_read_task)(char *, int); // 处理设备数据任务，将数据处理成字符数组
    int (*pre_write_task)(char *, int); // 处理设备数据任务，将字符数组处理成设备数据
} Device_t;

/**
 * @brief 初始化设备
 * @param file_name 设备操作文件名
 * @param device_index 设备索引
 * @return 设备地址
 */
Device_t *app_device_init(char *file_name, int device_index);

/**
 * @brief 启动设备
 * @param device 设备地址
 * @return 0 成功，-1 失败
 */
int app_device_start(Device_t *device,int device_index);

/**
 * @brief 销毁设备
 * @param device 设备地址
 */
void app_device_destory(Device_t *device);

#endif /* __APP_DRIVER_H__ */